package com.lrs.java.j2se_advanced.regexp;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class LineCount {
	
	public static int normalLines = 0;
	public static int commentLines = 0;
	public static int whiteLines = 0;
	
	public static void main(String[] args) {
		File f = new File("D:\\share\\Tank");
		File[] codeFiles = f.listFiles();
		for(File child : codeFiles) {
			if(child.getName().matches(".*\\.java$")) {
				parse(child);
			}
		}
		
		System.out.println("normalLines: " + normalLines);
		System.out.println("commentLines: " + commentLines);
		System.out.println("whiteLines: " + whiteLines);
	}

	private static void parse(File child) {
		BufferedReader br = null;
		boolean comment = false;
		
		try {
			br = new BufferedReader(new FileReader(child));
			String str = "";
			while((str = br.readLine()) != null) {
				str = str.trim();
				if(str.matches("^[\\s&&[^\\n]]*$")) {
					whiteLines ++;
				} else if(str.startsWith("/*") && !str.endsWith("*/")) {
					commentLines ++;
					comment = true;
				} else if(str.startsWith("/*") && str.endsWith("*/")) {
					commentLines ++;
				} else if(true == comment) {
					commentLines ++;
					if(str.endsWith("*/")) {
						comment = false;
					}
				} else if(str.startsWith("//")) {
					commentLines ++;
				} else {
					normalLines ++;
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(br != null) {
				try {
					br.close();
					br = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
